﻿// Doc-Encode UTF8-BOM, Space(4), Unix(LF)
#include "himpp_v4.h"
#include "hiobj.h"
#include <string.h>
#include <assert.h>

#include "hi_comm_venc.h"
#include "mpi_venc.h"


//////////////////////////////////////////////////////////////////////////
// 导出函数


static int hivenc_GetStream(lua_State* L)
{
    int chn = luaL_checkinteger(L, 1);
    int ms = luaL_checkinteger(L, 2);

    VENC_STREAM_S stream;
    memset(&stream, 0, sizeof(stream));

    int ret = HI_MPI_VENC_GetStream(chn, &stream, ms);

    lua_pushinteger(L, ret);                        // #1
    hiobj_t* ptr = new_hiobj(L, "VENC_STREAM_S");   // #2
    memcpy(ptr->data, &stream, sizeof(stream));

    return 2;   // 2 个返回值
}

static int hivenc_ReleaseStream(lua_State* L)
{
    int chn = luaL_checkinteger(L, 1);

    hiobj_t* ptr = to_hiobj(L, 2);
    checktype_hiobj(L, ptr, "VENC_STREAM_S");

    int ret = HI_MPI_VENC_ReleaseStream(chn, (VENC_STREAM_S*)ptr->data);

    lua_pushinteger(L, ret);
    return 1;   // 1 个返回值
}

//////////////////////////////////////////////////////////////////////////
// 常量定义

static void hivenc_define(lua_State* L)
{

}

//////////////////////////////////////////////////////////////////////////
// 库

KLB_API int luaopen_himpp_hivenc(lua_State* L)
{
    static luaL_Reg lib[] =
    {
        { "GetStream",          hivenc_GetStream },
        { "ReleaseStream",      hivenc_ReleaseStream },

        { NULL,                 NULL }
    };

    // 创建导出库函数
    luaL_newlib(L, lib);

    // 常量
    hivenc_define(L);

    return 1;
}
